package jy.struts.action;

import org.apache.struts.actions.DispatchAction;


import javax.servlet.http.*;

import jy.util.Constants;

/**
 * 所有Action的基类，此Action中包含一些基本的操作，比如存数据、去数据，以及权限控制等等。
 * 
 * @author LIUQ
 * 
 */
public class BaseAction extends DispatchAction {
	/**
	 * 向session中存数据
	 * 
	 * @param request
	 *            request对象
	 * @param key
	 *            在session中与obj关联的key值
	 * @param obj
	 *            存入session中的对象
	 */
	protected void setSessionAttribute(HttpServletRequest request, String key,
			Object obj) {
		request.getSession().setAttribute(key, obj);
	}

	/**
	 * 从session中取对象
	 * 
	 * @param request
	 *            request对象
	 * @param key
	 *            key值
	 * @return 在session中与key值相关联的对象
	 */
	protected Object getSessionAttribute(HttpServletRequest request, String key) {
		return request.getSession().getAttribute(key);
	}

	/**
	 * 从session中取出用户名
	 * 
	 * @param request
	 *            request对象
	 * @return 保存在session中的用户名
	 */
	protected String getUserName(HttpServletRequest request) {
		Object obj = this.getSessionAttribute(request, Constants.UserName_Key);
		if (obj == null) {
			return null;
		} else {
			return obj.toString();
		}
	}

	/**
	 * 从session中移除对象
	 * 
	 * @param request
	 *            request对象
	 * @param key
	 *            key值
	 */
	protected void removeSessionAttribute(HttpServletRequest request, String key) {
		request.getSession().removeAttribute(key);
	}

	/**
	 * 判断session中是否存在key值指定的对象
	 * 
	 * @param request
	 *            request对象
	 * @param key
	 *            key值
	 * @return 若存在，返回true，否则返回false
	 */
	protected boolean isExistSessionAttribute(HttpServletRequest request,
			String key) {
		if (request.getSession().getAttribute(key) != null)
			return true;
		else
			return false;
	}

	/**
	 * 判断是否超时，用于权限控制等。防止未登陆用户恶意调用Action
	 * 
	 * @param request
	 *            request对象
	 * @return 若超时，返回true，否则返回false
	 */
	protected boolean isTimeout(HttpServletRequest request) {
		/* 假如session中有用户名信息，则说明是登陆用户，认为是合法用户 */
		if (this.isExistSessionAttribute(request, Constants.UserName_Key)) {
			return false;
		} else {
			return true;
		}
	}
}
